﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GingerBeard.Utilities;
using System.Diagnostics;

namespace GingerBeard.ColladaHelpers
{
	public class ColladaNode : Node
	{
		String id;
		public System.String Id
		{
			get { return id; }
			set { id = value; }
		}
		String name;
		public System.String Name
		{
			get { return name; }
			set { name = value; }
		}
		#region INode Members

		public void AddNode(Object o)
		{
			Debug.Assert(o is ColladaNode);
			Nodes.Add(o as ColladaNode);
		}

		#endregion
	}

	public class ColladaFile : ColladaNode
	{
	}

	public class ColladaAsset : ColladaNode
	{
		String created;
		public System.String Created
		{
			get { return created; }
			set { created = value; }
		}
		String modified;
		public System.String Modified
		{
			get { return modified; }
			set { modified = value; }
		}
		String upAxis;
		public System.String UpAxis
		{
			get { return upAxis; }
			set { upAxis = value; }
		}
	}

	public class ColladaContributor : ColladaNode
	{
		String author;
		public System.String Author
		{
			get { return author; }
			set { author = value; }
		}
		String authoringTool;
		public System.String AuthoringTool
		{
			get { return authoringTool; }
			set { authoringTool = value; }
		}
		String comments;
		public System.String Comments
		{
			get { return comments; }
			set { comments = value; }
		}
		String copyright;
		public System.String Copyright
		{
			get { return copyright; }
			set { copyright = value; }
		}
	}

	public class ColladaUnit : ColladaNode
	{
		float meter;
		public float Meter
		{
			get { return meter; }
			set { meter = value; }
		}
	}

	public class ColladaLibrary<T> : ColladaNode
	{
	}

	public class ColladaCamera : ColladaNode
	{
	}

	public class ColladaOptics : ColladaNode
	{
	}

	public class ColladaPerspective : ColladaNode
	{
		float yfov;
		public float YFov
		{
			get { return yfov; }
			set { yfov = value; }
		}
		float aspectRatio;
		public float AspectRatio
		{
			get { return aspectRatio; }
			set { aspectRatio = value; }
		}
		float znear;
		public float ZNear
		{
			get { return znear; }
			set { znear = value; }
		}
		float zfar;
		public float ZFar
		{
			get { return zfar; }
			set { zfar = value; }
		}
	}

	public class ColladaLight : ColladaNode
	{

	}

	public class ColladaPointLight : ColladaNode
	{
		float[] color = new float[3];
		public float[] Color
		{
			get { return color; }
			set { color = value; }
		}
		float constantAttenuation;
		public float ConstantAttenuation
		{
			get { return constantAttenuation; }
			set { constantAttenuation = value; }
		}
		float linearAttenuation;
		public float LinearAttenuation
		{
			get { return linearAttenuation; }
			set { linearAttenuation = value; }
		}
		float quadraticAttenuation;
		public float QuadraticAttenuation
		{
			get { return quadraticAttenuation; }
			set { quadraticAttenuation = value; }
		}
	}

	public class ColladaMaterial : ColladaNode
	{

	}

	public class ColladaEffect : ColladaNode
	{

	}

	public class ColladaTechnique : ColladaNode
	{
		String sid;
		public System.String sId
		{
			get { return sid; }
			set { sid = value; }
		}
		String profile;
		public System.String Profile
		{
			get { return profile; }
			set { profile = value; }
		}
	}

	public class ColladaTechniqueCommon : ColladaNode
	{

	}
	

	public class ColladaPhong : ColladaNode
	{

	}

	public class ColladaGeometry : ColladaNode
	{

	}

	public class ColladaMesh : ColladaNode
	{

	}

	public class ColladaSource : ColladaNode
	{
	}

	public class ColladaArray<T> : ColladaNode
	{
		T[] elements;
		public T[] Elements
		{
			get { return elements; }
			set { elements = value; }
		}
	}

	public class ColladaAccessor : ColladaNode
	{
		int count;
		public int Count
		{
			get { return count; }
			set { count = value; }
		}
		int offset;
		public int Offset
		{
			get { return offset; }
			set { offset = value; }
		}
		String source;
		public System.String Source
		{
			get { return source; }
			set { source = value; }
		}
		int stride;
		public int Stride
		{
			get { return stride; }
			set { stride = value; }
		}
	}

	public class ColladaParam : ColladaNode
	{
		String type;
		public System.String Type
		{
			get { return type; }
			set { type = value; }
		}
	}

	public class ColladaVertices : ColladaNode
	{

	}

	public class ColladaInput : ColladaNode
	{
		String semantic;
		public System.String Semantic
		{
			get { return semantic; }
			set { semantic = value; }
		}
		String source;
		public System.String Source
		{
			get { return source; }
			set { source = value; }
		}
	}

	public class ColladaPolylist : ColladaNode
	{
		int count;
		public int Count
		{
			get { return count; }
			set { count = value; }
		}
		String material;
		public System.String Material
		{
			get { return material; }
			set { material = value; }
		}
		int[] vcount;
		public int[] VCount
		{
			get { return vcount; }
			set { vcount = value; }
		}
		int[] p;
		public int[] P
		{
			get { return p; }
			set { p = value; }
		}
	}

	public class ColladaVisualScene : ColladaNode
	{

	}

	public class ColladaVisualSceneNode : ColladaNode
	{
		float[] translate = new float[3];
		public float[] Translate
		{
			get { return translate; }
			set { translate = value; }
		}
		float[,] rotate = new float[3,4];
		public float[,] Rotate
		{
			get { return rotate; }
			set { rotate = value; }
		}
	}

	public class ColladaScene : ColladaNode
	{

	}

	public class ColladaInstance<T> : ColladaNode
	{
		String url;
		public System.String Url
		{
			get { return url; }
			set { url = value; }
		}
	}

	public class ColladaBindMaterial : ColladaNode
	{

	}

	public class ColladaInstanceMaterial : ColladaNode
	{
		String symbol;
		public System.String Symbol
		{
			get { return symbol; }
			set { symbol = value; }
		}
		String target;
		public System.String Target
		{
			get { return target; }
			set { target = value; }
		}
	}

	public class ColladaInstanceGeometry : ColladaNode 
	{
		String url;
		public System.String Url
		{
			get { return url; }
			set { url = value; }
		}
	}

	public class ColladaMaterialBinding : ColladaNode
	{
	}
}
